﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using XQ.Framework.html;
using XQ.Framework.core;
using XQ.Framework.common;

namespace XQ.Framework.html
{
    /// <summary>
    /// Summary description for PagerHelper
    /// </summary>
    public class PagerHelper
    {
        /// <summary>
        /// 
        /// 思路如下：
        /// 
        /// 1.生成第一页
        /// 2.计算游标开始位置
        /// 3.判断游标开始位置之前是否还有内容，如果有就添加省略号
        /// 4.计算游标结束位置
        /// 5.通过for循环生成游标开始结束的html
        /// 6.判断游标结束位置之后是否还有内容，如果有就添加省略号
        /// 7.生成最后一页
        /// 8.判断是否需要显示总页数
        /// 
        /// </summary>
        /// <param name="currentPage"></param>
        /// <param name="pageCount"></param>
        /// <param name="url"></param>
        /// <param name="showCount"></param>
        /// <returns></returns>
        public static string GetSimplePagerHtml(int currentPage, int pageCount, string url, bool showCount)
        {
            try
            {
                //判断数据是否有用
                if (!(1 <= currentPage && currentPage <= pageCount))
                {
                    return Com.getHtmlNotes(string.Format("当前页不在范围内[cur:{0},count:{1}]", currentPage, pageCount));
                }
                //如果是第一页就不用分页了
                if (pageCount == 1) { return Com.getYellowBlockHtml("只有一页：）"); }
                //判断参数是否正确
                if (!ValidateHelper.IsPlumpString(url)) { return Com.getYellowBlockHtml("给定参数不对"); }
                StringBuilder html = new StringBuilder();
                html.Append("<div class='wj_simple_pager'><ul>");
                /////////////////////////////前面是判断数据是否有用，下面开始生成////////////////////////

                //第一页
                html.Append(currentPage == 1 ?
                    "<li class='first_li selected'><a href='javascript:;' target='_self'>1</a></li>" :
                    "<li class='first_li'><a href='" + (url + 1) + "' target='_self'>1</a></li>");
                //计算游标开始,结束的位置（除了第一页和最后一页其他数字就是游标的范围）
                int cursorStart = currentPage - 2, cursorEnd = currentPage + 3;
                //游标开始<=2
                if (cursorStart <= 2)
                {
                    cursorStart = 2;
                }
                else
                {
                    //如果游标开始位置大于2则表明在此游标前还有内容，加省略号。
                    html.Append("<li><a href='" + url + (cursorStart - 1) + "' target='_self'>" +
                        HtmlHelper.getPreString() + "</a></li>");
                }
                //判断游标结束位置是否还有更多内容
                bool hasMore = cursorEnd < pageCount - 1;
                //如果没有更多内容，游标结束就在最后一页前一页
                if (!hasMore)
                {
                    cursorEnd = pageCount - 1;
                }
                //通过游标生成页码
                for (int i = cursorStart; i <= cursorEnd; ++i)
                {
                    html.Append(currentPage == i ?
                        "<li class='selected'><a href='javascript:;' target='_self'>" + currentPage + "</a></li>" :
                        "<li><a href='" + url + i + "' target='_self'>" + i + "</a></li>");
                }
                //如果有更多就加省略号
                if (hasMore)
                {
                    html.Append("<li><a href='" + url + (cursorEnd + 1) + "' target='_self'>" + HtmlHelper.getNextString() + "</a></li>");
                }
                //生成最后一页
                html.Append(currentPage == pageCount ?
                    "<li class='last_li selected'><a href='javascript:;' target='_self'>" + pageCount + "</a></li>" :
                    "<li class='last_li'><a href='" + url + pageCount + "' target='_self'>" + pageCount + "</a></li>");
                html.Append("</ul>");
                if (showCount)
                {
                    html.Append("<ul class='right_ul'><li>");
                    html.Append("<a href='javascript:;' target='_self'>" + currentPage + "/" + pageCount + "</a>");
                    html.Append("</li></ul>");
                }
                html.Append("</div>");
                return html.ToString();
            }
            catch (Exception e)
            {
                return Com.getHtmlNotes(e.Message);
            }
        }
    }
}